/**
 * 酒店API服务 - 来一票接口
 */
import axios from 'axios';
import { API_CONFIG } from './config';
import { buildRequestParams } from './utils';

// 创建axios实例
const apiClient = axios.create({
  baseURL: API_CONFIG.baseURL,
  timeout: 30000,
  headers: {
    'Content-Type': 'application/json'
  }
});

/**
 * 统一的API请求方法
 * @param {string} interfaceCode - 接口编码
 * @param {Object} data - 业务数据
 * @returns {Promise} - 请求结果
 */
async function callApi(interfaceCode, data = {}) {
  const requestParams = {
    interfaceCode,
    ...data
  }
  
  try {
    const url = `/app/aggregateShop/common/hotel_two_interface`;
    const response = await apiClient.post(url, requestParams);
    return response.data;
  } catch (error) {
    console.error(`接口调用错误 [${interfaceCode}]:`, error);
    throw error;
  }
}

/**
 * 城市列表查询
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码，默认1
 * @param {number} params.row - 每页大小，最大100，默认100
 * @param {string} [params.cityCode] - 城市编码（可选）
 * @returns {Promise} - 请求结果
 */
export async function queryCityList(params = {}) {
  const data = {
    page: params.page || 1,
    row: params.row || 100,
    ...(params.cityCode && { cityCode: params.cityCode })
  };
  
  return callApi('queryCity', data);
}

/**
 * 酒店列表查询
 * @param {Object} params - 搜索参数
 * @param {string} params.cityCode - 城市编码（必填）
 * @param {string} params.checkInDate - 入住日期（必填）
 * @param {string} params.checkOutDate - 离店日期（必填）
 * @param {number} params.pageIndex - 页码
 * @param {number} params.pageSize - 每页大小（最大10条）
 * @param {string} [params.keyword] - 关键词，多个关键字用空格分隔（可选）
 * @param {Object} [params.condition] - 其他查询条件（可选）
 * @param {number} [params.condition.minPrice] - 最低价格
 * @param {number} [params.condition.maxPrice] - 最高价格
 * @param {string} [params.condition.sortType] - 排序方式
 * @param {Array} [params.condition.ranks] - 星级数组
 * @param {number} [params.condition.latitude] - 纬度(高德)
 * @param {number} [params.condition.longitude] - 经度(高德)
 * @returns {Promise} - 请求结果
 */
export async function searchHotels(params) {
  // 构建基础参数
  const data = {
    cityCode: params.cityCode,
    checkInDate: params.checkInDate,
    checkOutDate: params.checkOutDate,
    page: params.pageIndex || 1,
    row: Math.min(params.pageSize || 10, 10), // 最大10条
  };
  
  // 添加关键词（如果有）
  if (params.keyword) {
    data.keyword = params.keyword;
  }
  
  // 构建 condition 对象
  const condition = {};
  
  if (params.minPrice !== undefined && params.minPrice !== null && params.minPrice > 0) {
    condition.minPrice = params.minPrice;
  }
  
  if (params.maxPrice !== undefined && params.maxPrice !== null && params.maxPrice > 0) {
    condition.maxPrice = params.maxPrice;
  }
  
  if (params.sortType) {
    condition.sortType = params.sortType;
  }
  
  if (params.ranks && params.ranks.length > 0) {
    condition.ranks = params.ranks;
  }
  
  if (params.latitude !== undefined && params.latitude !== null) {
    condition.latitude = params.latitude;
  }
  
  if (params.longitude !== undefined && params.longitude !== null) {
    condition.longitude = params.longitude;
  }
  
  // 只有当 condition 有内容时才添加
  if (Object.keys(condition).length > 0) {
    data.condition = condition;
  }
  
  return callApi('searchHotel', data);
}

/**
 * 酒店详情查询
 * @param {Object} params - 请求参数
 * @param {string} params.hotelCode - 酒店编码（必填）
 * @param {string} params.checkInDate - 入住日期（必填）
 * @param {string} params.checkOutDate - 离店日期（必填）
 * @param {number} params.adultCount - 成人数量（必填）
 * @param {number} params.childCount - 儿童数量（必填）
 * @returns {Promise} - 请求结果
 */
export async function getHotelDetail(params) {
  const data = {
    hotelCode: params.hotelCode,
    checkInDate: params.checkInDate,
    checkOutDate: params.checkOutDate,
    adultCount: params.adultCount || 1,
    childCount: params.childCount || 0
  };
  
  return callApi('getHotelDetail', data);
}

/**
 * 房型及产品查询接口（使用酒店详情接口的rooms数据）
 * @param {Object} params - 请求参数
 * @param {string} params.hotelCode - 酒店编码（必填）
 * @param {string} params.checkInDate - 入住日期（必填）
 * @param {string} params.checkOutDate - 离店日期（必填）
 * @param {number} params.adultCount - 成人数量（必填）
 * @param {number} params.childCount - 儿童数量（必填）
 * @returns {Promise} - 请求结果
 */
export async function getRoomProducts(params) {
  // 房型产品实际使用酒店详情接口，返回的rooms字段包含房型信息
  return getHotelDetail(params);
}